main() {
  //数值型
//  fun_01();
  //字符串型
//  fun_02();
  //列表类型
//  fun_03();
//set散列表
//  fun_04();
//Map集合
  fun_05();
//集合遍历
//  fun_06();
}

fun_01() {
  //double表示浮点数类型,占内存8个字节64位
  double i = 1;
  double k = i;
  //int表示整数类型,占内存8个字节64位
  int j = 1;

  //给double类型变量赋值int类型,会自动转换为double类型
  print(i);
  print(j);
  //判断值是否相等
  print(i == j);
  //判断是否为同一个引用
  print(identical(i, k));
}

fun_02() {
  //使用单引号声明的字符串内可包含双引号
  var str_01 = 'hello "你好"';
  //使用双引号声明的字符串内可包含单引号
  var str_02 = "hello '你好'";
  //单引号声明内使用单引号需使用转义字符,双引号声明类同
  var str_03 = 'hello \'你好\'';
  var str_04 = "hello \"你好\"";

  //通kotlin类似dart也可以使用表达式作为字符串的一部分
  var name = "张";
  var str_05 = "hello $name";

  //使用三个单引号和三个双引号定义换行字符串
  var str_06 = """
  苹果
  香蕉
  桃子
  """;
  //以上定义方式等价于
  var str_07 = "苹果\n香蕉\n桃子";

  //与其他类型之间的转换
  var str_08 = "100";
  var int_01 = int.parse(str_08);
  var str_09 = int_01.toString();
}

fun_03() {
  //声明list列表集合
  var list_01 = [1, "2", 3];
  List<int> list_02 = [1, 2, 3];

  //List列表常用的方法
  print(list_01.length); //获取列表长度
  list_01.add("c"); //添加一个元素
  list_01.addAll(list_02); //添加一个列表
  print(list_01.elementAt(0)); //根据下标获取一个元素
  print(list_01.contains("c")); //判断是否包含某个元素
  list_01.removeAt(0); //根据下标移除元素
  list_01[0] = "A"; //设置下标为0的元素的值
  list_01.clear(); //清空列表
  print(list_01.toString()); //打印列表内容
}

fun_04() {
  //声明Set集合
  var temp = 1;
  var set_01 = {"a", "b", temp, temp};
  set_01.add(1);
  Set<String> set_02 = {"a", "b", "c", "c"};

  //打印结果:
  //{a, b, 1}
  //{a, b, c}
  //添加的重复元素并没有被存储在集合中
  print(set_01.toString());
  print(set_02.toString());
  //从输出结果看,Set集合似乎是有序的,但实际上其内部存储是无序的,不能通过下标来获取元素.
}

fun_05() {
  //声明Map集合
  var map_01 = {"A": "a", "B": "b", 1: 1};
  Map map_02 = {"A": "a", "B": "b", 1: "1"};
  Map<String, String> map_03 = {"A": "a", "B": "b", "1": "1"};

  //常用方法
  map_01["C"] = "c"; //添加一个元素,如果集合中存在key则修改,不存在则添加

  //打印结果:
  //{A: a, B: b, 1: 1, C: c}
  print(map_01);

  map_01.forEach((k, v) {
    print("$k:$v");
  });
}

fun_06() {
  var set = {1, 2, 3, 4, 5, 6, 7, 8, 9};

  //方式一
  set.forEach((f) {
    print(f);
  });

  //方式二
  for (var e in set) {
    print(e);
  }

  //其他集合遍历不尽相同,不过都有forEach()方法可供使用
}
